/**
 * 目的:设定localStorage过期时间
 * 步骤:
 * 1.新建js文件 “layui.define” 重写setItem//设置缓存，getItem拿到缓存(判断是否过期)
 * 2.用layui的exports把该方法暴露出去：exports('myStorage', obj);
 * 3.使用：
 *   1）layui.config({base:'/script/'});//加载写好的js文件，注意该文件不能放在layui的目录下
 *   2）storage=layui.myStorage;//获取key，就是第2步暴露的key
 *   3）使用storage.setItem
 */
layui.define(function(exports) {
    var obj = {
        //设置缓存
        setItem : function(params){
            let obj = {
                name:'',
                value:'',
                expires:"",
                startTime:new Date().getTime()//记录何时将值存入缓存，毫秒级
            }
            let options = {};
            //将obj和传进来的params合并
            Object.assign(options,obj,params);
            if(options.expires){
                //如果options.expires设置了的话
                //以options.name为key，options为值放进去
                localStorage.setItem(options.name,JSON.stringify(options));
            }else{
                //如果options.expires没有设置，就判断一下value的类型
                let type = Object.prototype.toString.call(options.value);
                //如果value是对象或者数组对象的类型，就先用JSON.stringify转一下，再存进去
                if(Object.prototype.toString.call(options.value) == '[object Object]'){
                    options.value = JSON.stringify(options.value);
                }
                if(Object.prototype.toString.call(options.value) == '[object Array]'){
                    options.value = JSON.stringify(options.value);
                }
                localStorage.setItem(options.name,options.value);
            }
        },
        //拿到缓存
        getItem: function(name){
            let item = localStorage.getItem(name);
            //先将拿到的试着进行json转为对象的形式
            try{
                item = JSON.parse(item);
            }catch(error){
                //如果不行就不是json的字符串，就直接返回
                item = item;
            }
            //如果有startTime的值，说明设置了失效时间
            if(item.startTime){
                let date = new Date().getTime();
                //何时将值取出减去刚存入的时间，与item.expires比较，如果大于就是过期了，如果小于或等于就还没过期
                if(date - item.startTime > item.expires){
                    //缓存过期，清除缓存，返回false
                    localStorage.removeItem(name);
                    return null;
                }else{
                    //缓存未过期，返回值
                    return item.value;
                }
            }else{
                //如果没有设置失效时间，直接返回值
                return item;
            }
        },
        //移出缓存
        removeItem:function(name){
            localStorage.removeItem(name);
        },
        //移出全部缓存
        clear:function(){
            localStorage.clear();
        }
    }
    //expotts("key",value)
    //暴露出去 待会在第二步就要用key值来获取var obj这个对象。继而调用对象中方法
    exports('myStorage', obj);
});